表-列

前言

数据库表

select a.ad_table_id,b.tablename,count(a.ad_window_id)  from ad_tab a join ad_table b on a.ad_table_id=b.ad_table_id
group by a.ad_table_id,b.tablename 
having count(a.ad_window_id) > 1 
order by 3 desc

表可以被不同的tab页签引用。比如业务伙伴属于查询类型被复用,比如订单属于场景类型被复用。
最佳实践

固定列

挂流程的列

比如删除过账单据的变更日志:
delete from ad_changelog where ad_table_id 
in (select ad_table.ad_table_id from ad_table join ad_column 
on ad_table.ad_table_id=ad_column.ad_table_id 
where ad_column.columnname ='Posted')

比如:删除实体事务数据
This process will delete all the transaction data related to the Tenant. The setup data will remain
there. Please review the Test Requirements section for details.
Here is the list of transaction tables.
1. Any table having a column name Processed.
2. Table name like %Log.
3. Table name like %Run.
4. Table name like %MA.
5. Table name like %SLA_Measure.
6. Table name like Fact%.
7. Table name like M_Transaction%.
8. Table name like C_Allocation%.
9. Table name like M_StorageDe%.
10. Table name like R_Request%.
11. Table name like AD_WF_Process%.
12. Table name like AD_WF_EventAudit%.
13. Table name like AD_WF_Activity%.
14. Table name like M_TaskList%.
15. Table name like %PInstance%.
16. Table name W_Click, W_Counter, 

select b.tablename,a.columnname, a.defaultvalue from ad_column a 
join ad_table b on a.ad_table_id=b.ad_table_id and b.tablename ~ 'AD_Tab$|AD_Column$|AD_Field$'
where columnname~ 'IsReadOnly|IsUpdateable'
order by 2

页签:isReadonly,默认值=空,数据库默认值=N
字段:isReadonly,默认值=空  , 数据库默认值=N
列:   isUpdateable,默认值=Y ,数据库默认值=Y

1. 如果页签只读,那全部字段无法编辑。
2. 对于ad_client_id 例外,通常是不需要编辑的,*-Y-N 。即新建一个表后,该列是不可以更新的,由代码通过登录上下文实体ID直接写入数据库。
3. 对于ad_org_id,通常是需要编辑,*-N-Y。虽然登录有组织ID利于输入,但组织字段需要让用户选择。

select c.name as win_name, b.name as tab_name, b.isreadonly as tab_ronly, a.isreadonly as fld_ronly, 
d.IsUpdateable as col_updateable , b.ad_tab_id from ad_field a
join ad_tab b on a.ad_tab_id=b.ad_tab_id
join ad_window c on b.ad_window_id=c.ad_window_id
join ad_column d on a.ad_column_id=d.ad_column_id and d.columnname = 'AD_Client_ID' 
where a.isreadonly='Y' and d.IsUpdateable='N'
order by 6
结果:比较规范
N-Y   8条       可编辑实体,列可更新, 不推荐这个设置。
N-N   85条     可编辑实体,列无法更新,全由代码处理。
Y-N 974条      只读实体,列不可更新,由系统根据登录上下文实体ID赋值。
Y-Y    49条      只读实体,列可更新,也不推荐这个设置,客户端显示只读,不能根本禁止更新列。
总体,实体的列,通常不可以更新,由系统完成。

select c.name as win_name, b.name as tab_name, b.isreadonly as tab_ronly, a.isreadonly as fld_ronly, 
d.IsUpdateable as col_updateable , b.ad_tab_id from ad_field a
join ad_tab b on a.ad_tab_id=b.ad_tab_id
join ad_window c on b.ad_window_id=c.ad_window_id
join ad_column d on a.ad_column_id=d.ad_column_id and d.columnname = 'AD_Org_ID' 
where a.isreadonly='N' and d.IsUpdateable='Y'
order by 6

结果:IsReadOnly & IsUpdateable,比较乱,不规范
N-Y  60条    可编辑org,列可更新,由代码处理输入值。
N-N  693条 可编辑org,列不可更新,由代码处理输入值。
Y-N  346条  只读的org,列不可更新,系统根据登录上下文组织ID赋值。
Y-Y  17条    只读的org,列可更新,系统根据登录上下文组织ID赋值。与上面记录看不出规律
总体,显示的field只不过是一个用户端控制逻辑,多数情况下,列属性为不可更新。
技巧:查看id小的记录,可以看到一些规律。
CreateFrom是一个特殊列,系统会在代码级链接上下文表的流程。

select a.name as win_name,  b.name as tab_name , c.name as fld_name, c.IsCentrallyMaintained , d.columnname as col_name, d.ad_column_id , d.ad_process_id from ad_window a 
join ad_tab b on a.ad_window_id=b.ad_window_id
join ad_field c on c.ad_tab_id=b.ad_tab_id
join ad_column d on d.ad_column_id = c. ad_column_id and d.columnname ~'CreateFrom'
join ad_table e on e.ad_table_id = d.ad_table_id and e.isview = 'N'
 order by 7

CreateFrom列位于ad_element_id = 1490 ,共有17个表使用该列
系统提供内置12个CreateFrom流程,外加拓展的5个CreateFrom,用拓展的ad_procee_id挂在该列上。
按照词条翻译的条件,含有process的列(字段),使用流程的名称和描述,而不使用集中的element名称。

取消字段的集中维护字段,既可以自定义具体的说明和帮助。
同CreateFrom,将上面的SQL改下语句,如下:

select a.name as win_name,  b.name as tab_name , c.name as fld_name, c.IsCentrallyMaintained , d.columnname as col_name, d.ad_column_id , d.ad_process_id from ad_window a 
join ad_tab b on a.ad_window_id=b.ad_window_id
join ad_field c on c.ad_tab_id=b.ad_tab_id
join ad_column d on d.ad_column_id = c. ad_column_id and d.columnname ~'CopyFrom'
join ad_table e on e.ad_table_id = d.ad_table_id and e.isview = 'N'
 order by 7
seqno的复用bug

Reference默认
Boolean类型字段

其他